package pimp.organizermanager;
import java.util.Vector;

/*
    Klasę tą, dla wygody utworzyłem, by nie obsługiwać wszędzie wektora stringów.
 * Zaoszczędzi nam to dużo pracy. Często bowiem będizemy używać ToString, by dostać całe id.
 * Jeżeli ktoś potrzebowałby jakichś metod z vectora, to niech jest stworzy w analogiczny sposób
 * jak size czy elementAt
 *  ~~~~ noisy
 */

public class ID {

    public static String PATH_SEPARATOR = " > ";

    private Vector<String> id;
    private int uniqueID;


    public ID(Vector<String> id, int uniqueID) {
        this.id = id;
        this.uniqueID = uniqueID;
    }

    public ID(String idString) {
        this.id = new Vector<String>();
        uniqueID = -1;

        do{
            idString = idString.substring(ID.PATH_SEPARATOR.length());

            int nextSep = idString.indexOf(ID.PATH_SEPARATOR);

            if(nextSep == -1 ) break;

            this.id.add(idString.substring(0, nextSep ));
            idString = idString.substring(nextSep);

        }while(true);

        this.id.add(idString);
        
    }

    @Override
    public String toString(){
        String ret = "";
        for(String s : id)
            ret += PATH_SEPARATOR + s;

        ret += PATH_SEPARATOR + Integer.toString(this.uniqueID);

        return ret;
    }

    public int getUniqueID(){
        return uniqueID;
    }

    void setUniqueId(int uniqueID) {
        this.uniqueID = uniqueID;
    }

    public static boolean isParent(ID a, ID b)
    {
        if(b.size() < a.size() )
        {
            ID tmp = b;
            b=a;
            a=tmp;
        }

        for(int i=0, n=a.size(); i<n ;i++)
        {
            if(! a.elementAt(i).equals( b.elementAt(i) ) )
                return false;
        }

        return true;
    }

    int size() {
        return id.size();
    }

    String elementAt(int i) {
        return id.elementAt(i);
    }

    public String type(){
        return id.get(0);
    }

}
